Foundations path
From zero to DbContext. Each page needs only the pages above it.
- QuestionAuthentication vs authorizationWhat is the difference between authentication and authorization, and how do role-based and policy-based authorization work in ASP.NET Core?
- QuestionFilters in ASP.NET CoreWhat are filters in ASP.NET Core (authorization, resource, action, exception, result), in which order do they run, and how are they different from middleware?
- QuestionGlobal exception handling and loggingHow do you implement global exception handling and structured logging in a production ASP.NET Core API?
- QuestionJWT authenticationHow does JWT authentication work end to end in a .NET API: issuing the token, validating it, roles, expiry and refresh?
- QuestionMiddleware pipelineWhat is middleware, how does the request pipeline work, why does order matter, and how do you write custom middleware?
- QuestionModel binding and validationWhat is model binding in ASP.NET Core ([FromBody], [FromQuery], [FromRoute]), and how do you validate the input (data annotations, FluentValidation)?
- QuestionMVC pattern and request lifecycleWhat is the MVC pattern, and how does a request flow through ASP.NET Core MVC: routing, controller, action, view?
- QuestionREST, HTTP verbs and status codesWhat is REST? What is the difference between GET, POST, PUT, PATCH and DELETE, which of them are idempotent, and which status codes should an API return?
- QuestionSecuring a Web APIHow do you secure a Web API in ASP.NET Core (HTTPS, authentication, CORS, input validation, rate limits, secrets, XSS and CSRF)?
- QuestionAbstract class vs interfaceAbstract class vs interface: what are the differences, and when do you choose each?
- Questionasync / awaitHow does async/await work, and why use it in a web API?
- QuestionHow async/await works, and why use it in a web API · GeminiHow does async/await work, and why use it in a web API?
- QuestionAsync and await in a web API · LunaHow does async/await work, and why use it in a web API?
- QuestionClass vs object and constructors · DeepSeekWhat is the difference between a class and an object, and what types of constructors does C# have?
- QuestionCLR, JIT and ILHow is C# code compiled and run in .NET? Explain the CLR, IL and the JIT, and the difference between managed and unmanaged code.
- QuestionArray, List, interfaces, HashSet · DeepSeekWhat are collections in C#? Compare an array, ArrayList and List<T>; what is the difference between IEnumerable, ICollection and IList; what is HashSet, and which collection would you use when?
- QuestionConstructors: types and orderWhat are the types of constructors in C#? What do static and private constructors do, how does chaining work, and which runs first?
- QuestionDelegates and eventsWhat are delegates, Func and Action, and events? Where have you used them?
- Question.NET Framework vs .NET Core vs .NET.NET Framework vs .NET Core vs .NET 5 and later: what is the difference, why did Microsoft change it, and which would you use today?
- QuestionEF Core vs Dapper vs ADO.NETEF Core, Dapper or ADO.NET: what are the trade-offs, and when do you use each?
- QuestionGarbage collection and memory leaks · DeepSeekHow does garbage collection work in .NET, with generations and the large object heap, and how do you find a memory leak?
- QuestionLINQ and deferred executionWhat is LINQ, and what is deferred execution? How do you page results with it?
- QuestionFour pillars of OOPExplain the four pillars of OOP, with an example of each from your project.
- QuestionSOLID principlesExplain SOLID with a real example. Which principle does a given class break?
- QuestionStatic, sealed, partialWhat are static, sealed and partial classes, and when do you use each?
- QuestionTask vs Thread · DeepSeekWhat is the difference between a Task and a Thread, what is the Task Parallel Library, and when do you use Parallel.ForEach?
- QuestionValue vs reference typesWhat is the difference between value types and reference types in C#? Where do they live (stack or heap), how is a struct different from a class, and how does it affect performance?
- QuestionDI service lifetimesWhat are the service lifetimes in ASP.NET Core, and how do you choose one?
- QuestionDependency injection: what and whyWhat is dependency injection, what problem does it solve, and how do you register and inject a service?
- QuestionUnit testing basicsHow do you unit test your .NET code? What do you test, and how is a test laid out?
- PageAbstract class and methodA parent class that is only a starting point. You cannot build it on its own, and it can force every child to write certain methods.
- PageAccess modifiersWords in front of a class member that say who may use it. They let a class hide its data and open one checked door.
- PageClaims and ClaimsPrincipalHow the API knows who is calling: a list of small facts about the user, rebuilt from the token on every request.
- PageClass and objectThe blueprint you write once, and the things built from it while the app runs.
- PageComposition: is-a vs has-aInheritance says a class is a kind of another. Composition says a class has a part and calls it. Use it when one part changes for a different reason than the rest.
- PageConstructorThe code that runs once, the moment an object is built. The one place that can refuse a bad object.
- PageThe DI containerThe part of .NET that builds your objects, and hands them to the classes that need them.
- PageCorrelation ID and trace IDOne id per request, on every log line and in the error the user sees, so support can find the whole story in seconds.
- PageCORS: which websites may call the APIA browser rule, not a server lock: the API tells the browser which other websites' pages may read its answers.
- PageData vs behaviourSome classes are things that remember values, like a loan. Others are jobs that get done, like working out an EMI.
- PageDispose and garbage collectionThe garbage collector frees memory later. Dispose gives back connections and files now.
- PageEndpoint filters (minimal APIs)The minimal-API version of an action filter: code that runs around one endpoint's handler and sees its arguments.
- PageFilter lifetime: ServiceFilter vs TypeFilterHow you register a filter decides whether each request gets its own filter object or every request shares one.
- PageWho does what when production breaksThree companies, three support lines, one leader. Stop the harm first, find the cause second, prove it cannot come back third.
- PageInheritanceOne class is built on another and gets its data and methods. Write the shared part once.
- PageInterfaceA contract: a list of what a class promises to have, with no code inside.
- PageList<T> and IReadOnlyList<T>A list holds references to objects. A list of Contract can hold Loans and Leases side by side, and a loop calls each one's own method.
- PageProblemDetails: the standard error bodyOne agreed JSON shape for every error, so the portal and support read all errors the same way.
- PageReferences and newSome variables hold a value. Others hold only an address, and copying one never copies the object.
- PageRefresh-token rotation and reuse detectionEvery refresh token works once. If a used one comes back, someone copied it, so the whole family is cut.
- PageRegistering servicesThe lines in Program.cs that tell the container: when someone asks for this, build that.
- PageHow a change reaches productionOne build moves through four environments and two approvals, then a slot swap puts it live. Swapping back is the rollback.
- PageOne HTTP requestThe path one web request takes from the browser, through your app, and back.
- PageResolving a serviceWho asks the container for an object, when they ask, and what goes wrong when a class asks for itself.
- PageResource-based authorization and BOLAChecking the user against the record they asked for, after loading it. Skipping this check is the most common API hole: BOLA (Broken Object Level Authorization).
- PageScope and the root providerThe root lives as long as the app. A scope lives for one request, and so do the scoped objects inside it.
- PageSealed, and the two meanings of newsealed stops anyone inheriting from a class. new builds an object, but on a method it hides the parent's one, which causes a classic bug.
- PageServiceAn object whose job is to do work for other code, handed to the code that needs it.
- PageSigning keys: HMAC vs RSAWhy nobody can change a token without the API noticing, and who holds which key.
- PageState and statelessWhat an object remembers between one method call and the next, and why shared code should remember nothing.
- PageStatic vs instanceInstance: one copy in every object. Static: one copy on the class, shared by all.
- PageTask: a result that comes laterAn object that stands for work that has not finished yet. Like an order slip: you hold it now, the result comes later.
- PageThreads and thread-safetyOne line of work the computer runs. A web app runs many at once, and they all share your singletons.
- PageVirtual and overrideA parent says "children may replace this method"; a child replaces it. While the app runs, the object's real type decides which one runs.
- WordApp ServiceAzure's managed hosting for web apps, APIs and background jobs: you deploy the code, Azure runs the servers.
- WordworkerA background program with no web page. It runs on a timer or reads a queue. In .NET it is a BackgroundService.
- Worddeployment slotA second live copy of an App Service app with its own address. You deploy there first and test it.
- Wordslot swapStaging and production trade places: the warmed-up staging copy becomes live in seconds. Swapping back is the rollback.
- Wordsticky slot settingA setting that stays with its slot and does not move when the slots are swapped.
- WordApp InsightsAzure's monitoring for an app: requests, errors, logs, timings and memory, all searchable.
- WordKQLKusto Query Language: how you search App Insights logs. Like SQL written as a pipe: table | where | summarize.
- WordAzure Monitor alertA rule that watches a number or a log query and notifies people when it crosses a line.
- WordApp ConfigurationAn Azure service that holds settings and feature flags for many apps, changed without a deploy.
- WordKey VaultAzure's safe for secrets, keys and certificates. Apps read them at run time instead of keeping them in config files.
- Wordmanaged identityAn identity Azure gives an app, so it can sign in to Azure SQL or Key Vault with no password stored anywhere.
- WordAzure SQLSQL Server run by Azure: backups, patching and failover are handled for you.
- WordService BusAzure's message queue: one service drops a message, another picks it up later, even if it was down.
- WordAzure DevOpsMicrosoft's team tool: Repos for code and PRs, Pipelines for build and release, Boards for work items.
- Wordbranch policyAzure Repos rules a PR must pass before merging: reviewers, a green build, a linked work item, resolved comments.
- WordCopilot in AzureAI chat in the Azure portal: drafts KQL from a plain question and explains resources. Generally available April 2025.
- WordYAMLA plain-text format where indentation shows structure. Azure Pipelines are written in it.
- WordAlways OnAn App Service setting that keeps the app running when nobody calls it. Without it the app sleeps when idle, and background workers stop.
- WordAzure FunctionsSmall pieces of code Azure runs on an event or a schedule. A timer trigger runs one copy on a cron schedule, however many servers there are.
- Wordavailability testAn App Insights check that calls your URL from several Azure regions every few minutes and alerts when it fails.
- WordEntra IDMicrosoft's sign-in service (formerly Azure Active Directory): it signs users in and issues tokens with their app roles.
- WordWAFWeb application firewall: rules at the edge (here on Front Door) that block known attack patterns, floods and listed IP addresses before they reach the app.
- WordFront DoorAzure's global entry point for web traffic: it ends HTTPS near the user, caches, and forwards requests to the app.
- WordAzureFrontDoor.BackendA service tag: Azure's own named list of the public IP ranges Front Door uses to reach your app, kept up to date by Azure so you don't copy addresses by hand.
- WordContainer AppsAzure's managed service for running containers: it starts replicas, restarts a failed one and scales on load, without you managing servers.
- WordAzure Storage QueueA simple, cost-effective cloud message queue service for reliable asynchronous background job processing.
- WordIServiceCollectionThe list of registrations you fill in Program.cs (builder.Services) before the app is built.
- WordIServiceProviderThe built container. You ask it for a service and it builds or hands back the object.
- WordIServiceScopeOne short-lived group of objects. Scoped services live inside it and are disposed with it.
- WordIServiceScopeFactoryA singleton that makes new scopes. A singleton or background job uses it to open a scope, get scoped services, then dispose the scope.
- WordCreateScopeOpens a new scope from the root provider or IServiceScopeFactory. Wrap it in using so it is disposed.
- WordCreateAsyncScopeLike CreateScope, but disposes async-disposable services properly with await using.
- WordGetServiceAsks the container for a service; returns null if it is not registered.
- WordGetRequiredServiceAsks the container for a service; throws if it is not registered.
- WordAddTransientRegisters a service as transient: a new object on every resolve.
- WordAddScopedRegisters a service as scoped: one object per scope (per HTTP request).
- WordAddSingletonRegisters a service as singleton: one object for the whole app.
- WordAddDbContextRegisters an EF Core DbContext, scoped by default.
- WordAddHttpClientRegisters a typed HttpClient (transient) whose connections are pooled by IHttpClientFactory.
- WordAddControllersAsServicesMakes the container build controllers, so their registration and lifetime are checked like other services.
- WordAddProblemDetailsTurns errors into a standard JSON error body (RFC 7807 problem details).
- WordValidateScopesA container check: it throws if a scoped service is taken from the root or injected into a singleton. On by default only in Development.
- WordValidateOnBuildA container check at start-up: it tries to build every registration once, so a missing one fails before the first request.
- WordIDbContextFactoryMakes a new DbContext on demand. Used where there is no request scope, like Blazor or background work.
- WordMicrosoft.Extensions.DependencyInjectionThe namespace and NuGet package of the built-in .NET DI container.
- WordHttpContextEverything about the current HTTP request and its response: path, headers, the user, the request's services.
- WordHttpContext.RequestServicesThe scope's service provider for this request. ASP.NET Core sets it up and disposes it when the response ends.
- WordIHttpContextAccessorA singleton that gives you the current request's HttpContext from code that is not a controller. Only valid during that request.
- WordRequestDelegateThe next step in the middleware pipeline. A middleware calls it to pass the request on.
- WordIMiddlewareInterface for middleware the container builds per request, so it can take scoped services in its constructor.
- WordInvokeAsyncThe method a middleware runs for each request. Scoped services go in its parameters, not its constructor.
- WordUseapp.Use adds a middleware that can run code and then call the next one.
- WordRunapp.Run adds a last middleware that never calls a next one.
- WordMapapp.Map branches the pipeline by request path.
- WordUseExceptionHandlerMiddleware that catches unhandled exceptions and returns an error response.
- WordWebApplicationThe built app in Program.cs: holds the pipeline and the root service provider.
- WordWebApplicationFactoryStarts your whole API in memory for integration tests.
- WordUserThe signed-in caller (ClaimsPrincipal) on a controller or HttpContext, read from the token.
- WordActionResultA controller return type that can be either data or an HTTP status like 404.
- WordIActionResultInterface for any HTTP response a controller action returns.
- WordCreatedAtActionReturns 201 Created with a Location header pointing at the new resource.
- WordBackgroundServiceBase class for a hosted service: a loop that runs for the app's whole life. It is a singleton.
- WordIOptionsSettings bound from configuration, read once. Singleton.
- WordIOptionsSnapshotSettings re-read per request, so changes show up without restart. Scoped.
- WordIConfigurationAll app settings (appsettings.json, environment variables, secrets) as key-values. Singleton.
- WordILoggerWrites logs for a class; ILogger<T> tags them with the class name. Singleton-safe.
- WordIMemoryCacheAn in-process cache shared by all requests. Singleton, thread-safe.
- WordHybridCache.NET 9+ cache: in-memory plus an optional shared cache like Redis, and stops many requests rebuilding the same entry at once.
- WordIHttpClientFactorySingleton that hands out HttpClients and recycles their connection pools, so you avoid socket exhaustion and stale DNS.
- WordHttpClientSends HTTP requests. Reuse its connections through IHttpClientFactory; do not new one up per call.
- WordPooledConnectionLifetimeHow long a pooled HTTP connection is kept before it is replaced, so DNS changes are picked up.
- WordTimeProvider.NET 8+ abstraction for the current time, so tests can control the clock. Singleton.
- WordTimeProvider.SystemThe real clock implementation of TimeProvider.
- WordFakeTimeProviderTest version of TimeProvider: you set and move the time yourself.
- WordIValidatorFluentValidation's interface: one class that checks one request type.
- WordAsyncLocalA value that follows one async flow (one request) across awaits and threads. IHttpContextAccessor uses it.
- WordConcurrentDictionaryA thread-safe Dictionary: many threads can read and write at once.
- WordGetOrAddConcurrentDictionary method: return the value for a key, or add it if missing, safely.
- WordAddOrUpdateConcurrentDictionary method: add a key or update it, safely.
- WordTryAddAdds a key only if it is not there; returns false instead of throwing.
- WordContainsKeyChecks whether a dictionary has a key.
- WordInterlockedAtomic operations on a number (increment, swap) that are safe across threads without a lock.
- WordInterlocked.IncrementAdds 1 to a number as one indivisible step, safe across threads.
- WordSemaphoreSlimLimits how many callers run a piece of code at once; works with await.
- WordLazyBuilds a value only the first time it is used, thread-safe by default.
- WordTaskA piece of async work that finishes later; await it to get the result.
- WordTask.WhenAllWaits for several tasks running at the same time.
- WordParallel.ForRuns loop iterations on many threads at once.
- WordDictionaryKey-value store. Not thread-safe: two threads writing at once can corrupt it.
- WordListA growable list. Not thread-safe.
- WordIEnumerableAnything you can loop over with foreach.
- WordIDisposableHas a Dispose method that frees things like connections now, not when the garbage collector runs.
- WordIAsyncDisposableHas DisposeAsync, for cleanup that must await (closing a network stream).
- WordDisposeFrees what an object holds (connections, file handles) right away.
- WordDisposeAsyncAsync version of Dispose; called by await using.
- WordCloseCloses a connection; for SqlConnection, Dispose calls it too.
- WordSafeHandleA wrapper around an OS handle that is released even if Dispose is never called.
- WordSqlConnectionAn open connection to SQL Server. Dispose it to return it to the pool.
- WordSqlCommandOne SQL statement to run on a SqlConnection.
- WordOpenAsyncOpens a database connection without blocking a thread.
- WordObjectDisposedExceptionThrown when code uses an object after it was disposed, e.g. a DbContext from a finished request.
- WordInvalidOperationExceptionThrown when a call is not valid in the object's current state, e.g. two queries at once on one DbContext.
- WordArgumentExceptionThrown when a method is given a bad argument.
- WordArgumentOutOfRangeExceptionThrown when an argument is outside the allowed range.
- WordNullReferenceExceptionThrown when code uses a variable that points to nothing (null).
- WordDivideByZeroExceptionThrown on integer division by zero.
- WordTypeInitializationExceptionThrown when a static constructor fails; the type stays unusable.
- WordDbContextEF Core's object for one unit of work: runs queries, keeps a change tracker (list of loaded rows), and SaveChanges writes changes. Not thread-safe.
- WordSaveChangesWrites every tracked change to the database in one transaction.
- WordAddOn a DbContext: starts tracking a new row. Nothing is written until SaveChanges.
- WordCountAsyncEF Core: counts matching rows in the database without loading them.
- WordDateTimeA date and time value.
- WordDateTime.UtcNowThe current time in UTC. Hard to test; prefer TimeProvider.
- WordTimeSpanA length of time, like 5 minutes.
- WordMath.RoundRounds a number; pass MidpointRounding to choose how .5 rounds.
- WordMath.PowRaises a number to a power.
- WordMidpointRounding.AwayFromZeroRounds .5 up (away from zero), the way people expect for money. The default rounds to even.
- WordAwayFromZeroRounding mode: .5 goes away from zero.
- WordEqualsCompares two objects; a class can override it to compare values instead of addresses.
- WordReferenceEqualsTrue only if two variables point to the same object.
- WordAssert.EqualxUnit: passes if two values are equal (uses Equals).
- WordAssert.SamexUnit: passes only if both are the same object.
- WordAssert.ThrowsxUnit: passes if the code throws the given exception.
- WordLoanServicethe service with the loan rules; scoped, uses a repository.
- WordILoanServicethe contract LoanService fulfils; controllers depend on this.
- WordLoansControllerthe HTTP endpoints for loans.
- WordLoansController.GetAsyncthe endpoint that returns one loan.
- WordILoanRepositorythe contract for loading and saving loans.
- WordLoanRepositorythe EF Core repository for loans; scoped.
- WordInMemoryLoanRepositorya repository that keeps loans in a dictionary, for early slices and tests.
- WordLoanone loan (principal, rate, months) and its rules.
- WordLoanResponsethe JSON shape returned for a loan.
- WordCreateLoanRequestthe JSON body for creating a loan.
- WordChangeRateLoan's method to change its rate; it can refuse bad values.
- WordEmithe monthly instalment (EMI) calculation.
- WordEmi.Monthlycomputes the monthly instalment.
- WordCommon.Emithe shared EMI helper, called with its class name inside Loan.
- WordRoundEmirounds an EMI by the country's rules.
- WordMoneypure data, one amount rounded to paise. Same amount means equal Money.
- WordICountryRulesthe contract for country-specific rules (rounding, limits).
- WordIndiaRulesIndia's rules; fixed, so a singleton.
- WordPaiseRulesanother ICountryRules that rounds to paise.
- WordServicingDbContextthe Servicing module's DbContext; scoped.
- WordOriginationDbContextthe Origination module's DbContext; scoped.
- WordRateCacheexample: a singleton cache of interest rates (the captive-dependency bug).
- WordRequestContextbug example: holds the caller's id for one request, so it must be scoped (it was a singleton).
- WordRequestCountermiddleware example: counts requests in a singleton, so the count must be thread-safe.
- WordRequestLoggingMiddlewaremiddleware that logs each request.
- WordICurrentUserwho is calling, read from the token; scoped.
- WordCurrentUserthe ICurrentUser implementation, built per request from the token's claims.
- WordSmsGatewayexample: sends SMS; transient and IDisposable, so resolving it from the root leaks.
- WordCreateAsyncA common pattern name: a static method that does async setup, then calls new. Used because constructors cannot be async.
- WordNotFoundExceptionA custom exception some teams throw for a missing record; returning NotFound() is usually better.
- WordGetAsyncLoansController's endpoint that returns one loan and its EMI.
- WordOperationLive-coding class with one Guid Id, registered three ways to show which object each ask gets.
- WordIdReporterLive-coding service that asks for the three Operation registrations and returns their ids.
- WordIScopedOpLive-coding interface: Operation registered as scoped (ITransientOp and ISingletonOp are the other two).
- WordAddHostedServiceRegisters a BackgroundService to run with the app; it is registered as a singleton.
- WordIFeatureManagerMicrosoft.FeatureManagement: asks whether a feature flag is on, e.g. from Azure App Configuration.
- WordPeriodicTimerA timer you await in a loop: WaitForNextTickAsync returns once per period.
- WordHostingHostBuilderExtensionsThe .NET source that turns ValidateScopes and ValidateOnBuild on only in Development.
- WordHubDbContextThe integration hub's EF Core DbContext (Azure SQL); scoped.
- WordDelinquencyNoticeWorkerThe hub's nightly worker: recomputes days past due and sends past-due texts.
- WordINoticeSenderOur interface for sending a customer notice: the hub's SMS port, and in the overdue-notice job a Channel name plus a Send method (email, SMS or letter).
- WordRunOnceAsyncOne delinquency run in its own scope; the timer calls it, tests call it directly.
- WordPaidThroughThe date an account is paid up to; days past due are counted from it.
- WordHubFactoryThe hub's test host: a WebApplicationFactory on a throwaway SQL database.
- WordIOptionsMonitorA singleton view of settings that always has the latest value (CurrentValue) and tells you when they change (OnChange). The one a singleton should take.
- WordCurrentValueIOptionsMonitor's property with the settings as they are right now, after any reload.
- WordOnChangeIOptionsMonitor's method to run your code whenever the settings are reloaded.
- WordAddDbContextPoolRegisters a DbContext whose objects are reused across requests and reset in between, to save the cost of building one each time.
- WordConfigureTestServicesIn an integration test, changes the app's registrations after Program.cs ran: remove the real service, add a fake.
- WordFinanceContractthe abstract base class every loan and lease inherits: principal, rate, balance and an abstract MonthlyPayment.
- WordFinanceLeasea lease where the customer pays the residual at the end to keep the vehicle; overrides MonthlyPayment.
- WordOperatingLeasea lease where the lender keeps the vehicle and its value risk; adds maintenance to the payment.
- WordTracLeasea truck lease with a fixed residual: one new class, added without touching billing.
- WordMonthlyPaymentthe abstract method each contract overrides to work out its own monthly payment.
- WordCalculateEmithe name interviewers often give the monthly-payment method; in our code it is MonthlyPayment.
- WordApplyPaymentthe only way to lower a contract's Balance; refuses a negative amount or more than is owed.
- WordBalancewhat is still owed on a contract: anyone can read it, only the class can change it (private set).
- WordResidualthe vehicle's end-of-lease value, fixed when the lease is signed.
- WordAnnuitythe shared, protected payment formula every contract class calls.
- WordAmountDuewhat to bill this month. Abstract in Contract; Loan returns its monthly amount, Lease adds its service fee.
- WordPendingChargesexcess-mileage or damage charges waiting to be billed with the next rental.
- WordBillingRunthe monthly job that makes one bill per due contract by calling AmountDue on a mixed list of contracts.
- WordPaymentCalculatorthe old class with a switch on the product code that the refactor task replaces.
- WordInstalmentone scheduled payment: due date, amount and the interest inside it.
- WordSchedulea contract's list of instalments.
- WordPayoffQuotedthe App Insights event the payoff API logs for every quote: contract, date and amount.
- WordIReadOnlyLista list you can read and index but not change through this reference.
- WordReadOnlyCollectionthe read-only wrapper AsReadOnly returns; unlike a plain List, it can't be cast back and changed.
- WordAsReadOnlywraps a List in a ReadOnlyCollection: callers can read it, never add or remove.
- WordToListcopies a sequence into a new List: a new list holding the same references, not copies of the objects.
- WordNotSupportedExceptionthrown when a method exists but this type can't do it; in a child class it usually breaks callers (LSP).
- WordRemovetakes an item out of a list.
- WordabstractOn a class: it cannot be built with new, only inherited. On a method: no body, every child must override it.
- WordvirtualMarks a method that child classes may replace with override.
- WordoverrideReplaces a parent's virtual or abstract method; the object's real type decides which version runs.
- WordnewTwo jobs: before a type, builds an object (new Loan(...)); on a method, hides the parent's method instead of replacing it.
- WordsealedOn a class: nothing may inherit from it. On an override: no further child may override it.
- WordprotectedVisible inside the class and in classes that inherit from it; hidden from other code.
- Wordprivate setA property anyone can read but only the class's own code can write.
- WordrecordC# type for data: compares by value, and positional properties can only be set when it is built.
- WordbaseThe parent part of the current object: : base(...) calls the parent's constructor, base.Describe() the parent's method.
- WordBaseDealerClassUDC dealer portal: the base component 84 components build on (subscriptions, clean-up, form patching).
- WordBaseStandardQuoteClassUDC dealer portal: extends BaseDealerClass with quote modes, program changes and status.
- WordBaseDealerServiceUDC dealer portal: the abstract service holding the shared form data in a private field.
- WordBaseFormClassUDC portal: the base form component from the team's own UI library (auro-ui).
- WordBehaviorSubjectRxJS: a stream that remembers its latest value and gives it to every new subscriber.
- WordsetBaseDealerFormDataUDC portal: the one method that merges a change into the shared form data and broadcasts it.
- WordgetBaseDealerFormDataUDC portal: returns the shared form-data stream; today it hands out the subject itself.
- WordonFormDataUpdateUDC portal: an empty hook the base calls on every form change; each component overrides it.
- WordvalidateActionUDC portal: answers whether the user's role allows an action in the current mode. Hides buttons; the API must still check.
- WordasObservableRxJS: hands out a read-only view of a subject, so callers can listen but not call next().
- WordngOnInitAngular: the hook that runs once when a component starts. A child that overrides it must call super.ngOnInit().
- WordpublicVisible to any code.
- WordprivateVisible only inside the class that declares it. The default for class members.
- WordinternalVisible only inside the same assembly (the .dll one project builds).
- WordgetThe read half of a property.
- WordsetThe write half of a property.
- WordthisThe object the code is running on right now.
- WordforeachLoops over a collection, giving one item per turn.
- WordDescribeContract's method that returns the text for a contract; each child overrides it.
- WordClearRemoves every item from a list.
- WordCountHow many items a list holds.
- WordSystem.ReflectionCode that inspects and calls classes while the app runs, even private members.
- WordreadonlyA field that is set once (when declared or in the constructor) and never reassigned.
- WordvarLets C# work out a variable's type from the value on the right.
- WordContractthe abstract base class for every finance contract: holds Balance and MonthlyAmount, has ApplyPayment and an abstract AmountDue.
- WordLeasea contract where the customer pays monthly plus a service fee and returns the car; overrides AmountDue.
- WordMonthlyAmountthe fixed amount a contract agreed at signing; set once in the constructor.
- WordServiceFeethe monthly service-plan fee a Lease adds on top of its monthly amount.
- WordIContractRepositorythe interface that loads and saves contracts; its EF Core class reads Azure SQL.
- WordGetDueAsyncIContractRepository's method that loads every contract due on a day, as a mixed list of Contract.
- WordPaymentServicethe service that loads one contract, calls ApplyPayment and saves it.
- WordPayAsyncPaymentService's method for one payment.
- WordContractsControllerthe API controller for /contracts; hands each payment to PaymentService.
- WordBillone month's bill: a contract id and the amount due.
- WordContractsthe Azure SQL table with one row per contract; its Kind column tells EF Core which class to build.
- WordChargeone extra amount on a contract, like a late fee.
- WordChargesa Lease's list of extra charges; after the fix, a read-only view.
- WordAddChargethe one checked way to add a charge to a Lease.
- WordSubscriptiona car subscription: monthly card payment, cancel any month, no balance. Implements IBillable, not Contract.
- WordIBillablethe interface for anything that gets a monthly bill: an Id and AmountDue().
- WordILateFeeRulethe interface for a client's late-fee rule; Contract holds one and asks it (composition).
- WordTruckLeaseNavistar's truck lease: a contract that adds a mileage fee.
- WordMileageFeethe per-month mileage charge a TruckLease adds.
- WordDealCheckInvented BMW FS abstract class: Run tests the shared term rule, then calls the child's CheckProduct.
- WordGoLiveServiceInvented class that picks the deal check for a product and runs it before a deal goes live.
- WordFailDealCheck's protected method: adds one problem to its private error list.
- WordOperatingLeaseCheckInvented DealCheck child: an Operating Lease must state its return conditions.
- WordCheckProductIn the deal-check examples: the protected abstract step each child check writes; the base class calls it.
- WordErrorsDealCheck's read-only view of the problems it found.
- WordContractRowone row of the Contracts table as a plain C# object: every kind's columns, before it becomes a Loan or Lease.
- WordFakeLoanRepositorya test-only ILoanRepository that keeps loans in a list, so tests need no database.
- WordIsOverdueLoanService's check: is the loan's next due date before today?
- WordStatementServicebuilds a loan's monthly statement (payments and fees for one month).
- WordLendingFactorythe lending API's test host: starts the real app in a test, with a test database.
- WordOnConfiguringA DbContext method where the context sets its own connection, used only when nobody passed options in. Older code; with DI the options come from AddDbContext.
- WordIsConfiguredTrue when the DbContext already got its options (for example from AddDbContext), so OnConfiguring should do nothing.
- WordSqlExceptionThe error SQL Server's client library throws: a failed login, a timeout, a broken query.
- WordAddControllersTurns on MVC controllers in Program.cs. Controllers are then built per request.
- WordDependencyResolverThe old ASP.NET MVC 5 hook for plugging in a container like Autofac. ASP.NET Core does not need it.
- WordPolicyThe abstract base for insurance products sold with a car (car cover, tyre cover): a policy number, who to bill and a monthly premium. Signs IBillable.
- WordCarPolicyCar insurance: a sealed child of Policy whose AmountDue() is the monthly premium.
- WordBillableA rejected design on the abstract-vs-interface card: an abstract base class for anything billed, instead of the IBillable interface.
- WordBillToThe customer name a bill goes to. A property every IBillable must have.
- WordSummaryIBillable's one-line bill text, with a default body (C# 8 default interface method): name and amount due.
- WordMonthlyBillingJobThe timer job that runs on the 1st of each month and calls BillingRun.RunAsync.
- WordRunAsyncBillingRun's method that loads everything due on a day and makes one bill line each.
- WordIPaymentServiceAn example of an interface put on a service class that has only one version; often not needed.
- WordIStatementLineExample interface in a live task: a Describe() method with a default body for statement text.
- WordIAuditLineExample interface in a live task: a Describe() method with a default body for audit text.
- WordTruckLeaseBillIn Navistar's truck-lease add-on (another team's DLL): the class that signs IBillable for truck leases.
- WordTruckA one-line practice class in the incident's lab that signs IBillable.
- WordIDealCheckInvented UDC deal-check interface: one method, Check(deal), that returns the problems found.
- WordDealCheckBaseInvented abstract class for our own deal checks: runs the shared term rule, then the child's CheckProduct.
- WordNzLeaseCheckInvented deal check (inherits DealCheckBase): a UDC lease must have return terms.
- WordCreditLimitCheckInvented check written by UDC's developers: implements IDealCheck directly, no base class of ours.
- WordDealActivationInvented class that runs every IDealCheck on a deal and lets it go live only if none finds a problem.
- WordCheckIDealCheck's method: runs the check on a deal and returns the problems found (empty means pass).
- WordActivator.CreateInstanceBuilds an object from a Type known only while the app runs, as a plugin host does with a class from a loaded DLL.
- WordCancellationTokenA signal passed into async calls so they can stop early, e.g. when the client disconnects.
- WordOperationCanceledExceptionThrown by an async call when its CancellationToken fires.
- WordSynchronizationContextDecides which thread runs the code after an await. Desktop apps and old ASP.NET have one; ASP.NET Core has none.
- WordMoveNextThe method of the compiler-built state machine that runs an async method up to its next await, then resumes it later.
- WordThreadStaticAttribute that gives each thread its own copy of a static field. Breaks with async, which can resume on another thread.
- WordFirstOrDefaultAsyncEF Core: runs the query and returns a Task with the first matching row, or null.
- WordToListAsyncEF Core: runs the query and returns a Task with all matching rows as a List.
- WordSaveChangesAsyncEF Core: writes all tracked changes to the database in one transaction; returns a Task.
- WordReadFromJsonAsyncReads an HTTP response body and turns its JSON into a C# object; returns a Task.
- WordFromA static method on a response class (LoanResponse, PayoffQuote, CreditResult) that copies fields from the domain objects.
- WordCreditCheckServiceOrigination service that asks the credit bureau for an applicant's score.
- WordCreditResultWhat CreditCheckService returns: the score and the decision.
- WordICreditBureauClientTyped HttpClient for the credit bureau's API.
- WordApplicationsControllerAPI controller that takes new finance applications.
- WordWelcomeSmsSends the welcome text after a loan is created.
- WordISmsGatewayWrapper around the SMS provider's HTTP API.
- WordPayoffQuoteServiceBuilds a payoff quote from the loan and FIS's payoff amount.
- WordPayoffControllerAPI controller for payoff quotes.
- WordIFisQuoteClientTyped HttpClient for FIS's quote API.
- WordAuditWriterWrites an audit row (who did what, when) through the request's DbContext.
- WordUseMiddlewareAdds a middleware class to the pipeline; ASP.NET Core builds it once and passes it next.
- WordUseRoutingMiddleware that matches the URL to an endpoint, so later middleware (CORS, auth) can see which one will run.
- WordUseCorsMiddleware that applies a CORS policy: answers browser preflights and adds the allow headers. Goes before authentication.
- WordUseAuthenticationMiddleware that reads the token or cookie and fills HttpContext.User with who is calling.
- WordUseAuthorizationMiddleware that checks HttpContext.User against the endpoint's [Authorize] policy; answers 401 or 403 itself.
- WordMapControllersAdds an endpoint for every controller action; the last stop of the pipeline.
- WordMapGetAdds one endpoint for GET requests to a path, run by a small function (minimal API).
- WordMapWhenBranches the pipeline when a condition is true; the branch never rejoins the main line.
- WordUseWhenRuns extra middleware when a condition is true, then rejoins the main pipeline.
- WordProblemDetailsThe standard JSON shape for API errors: status, title, detail and a trace id (RFC 9457).
- WordIExceptionHandler.NET 8 interface for your error-handling logic, called by UseExceptionHandler.
- WordOnStartingHttpResponse.OnStarting: registers code to run just before the headers are sent; the safe place to add a header.
- WordBeginScopeILogger.BeginScope: attaches values (like a correlation id) to every log line written inside it.
- WordTraceIdentifierHttpContext.TraceIdentifier: the id ASP.NET Core gives each request.
- WordStopwatchMeasures elapsed time precisely; Stopwatch.StartNew() starts one.
- WordDefaultHttpContextA plain HttpContext you can create with new in a unit test.
- WordEnableBufferingRequest.EnableBuffering(): lets the request body be read more than once (e.g. by logging, then by the controller).
- WordUseHttpLoggingBuilt-in middleware that logs requests and responses, with an allow-list of fields and headers.
- WordIHttpModule.NET Framework (System.Web): a class IIS runs at fixed request events; the old way to do what middleware does.
- WordCorrelationIdMiddlewareLending API middleware: gives each request an id, puts it on every log line and in the X-Correlation-ID response header.
- WordRequestTimingMiddlewareTimes each request, adds X-Response-Time, warns on slow ones (the middleware card's live task).
- WordDealerStatusMiddlewareAnswers 403 when the calling dealer is suspended; reads the dealer list from the database.
- WordDealerContextMiddlewareNavistar API middleware that reads the dealer id from HttpContext.User for later code.
- WordMaintenanceWindowMiddlewareAnswers 503 to payment writes while FIS's end-of-day batch runs.
- WordExecuteAsyncThe one method a BackgroundService overrides: its long-running loop, started by the host at start-up.
- WordPaymentValidatorChecks a payment request (amount, contract, date) before PaymentService applies it. Holds no state, so transient.
- WordRejectionStatusCodeRate limiter option: the status code sent when a request is refused. Default 503; set it to 429 (Too Many Requests).
- WordCanGoLiveDealActivation's method: true when every check returns an empty error list.
- WordPayoffServiceInvented Navistar service: gets a truck loan's payoff amount from FIS and adds the lien release fee.
- WordIPayoffServiceThe interface the payoff controller asks for; PayoffService implements it.
- WordIFisPayoffClientInvented interface for asking FIS what is still owed on a contract. Real class: FisPayoffClient; tests use a fake.
- WordFisPayoffClientThe real IFisPayoffClient: calls FIS's payoff API over HTTP.
- WordFakeFisPayoffClientTest-only IFisPayoffClient: returns whatever Amount the test set, no network.
- WordDueDateServiceInvented UDC service: reads a contract's next due date and moves it past weekends and NZ holidays. Scoped.
- WordHolidayCalendarInvented singleton holding the NZ public holidays; IsWorkingDay only reads, so requests can share it.
- WordBuyoutServiceInvented BMW FS service: asks FIS for a leased car's residual value and adds the purchase option fee.
- WordTaskCanceledExceptionThrown when an HttpClient call is cancelled or times out; a kind of OperationCanceledException.
- WordLeaseAgreementInvented BMW FS class for one signed lease: a number and a term in months, checked by its constructor.
- WordTermMonthsInvented property on LeaseAgreement: how many months the lease runs. Must be above 0.
- WordQuoteInvented BMW FS parent class for a price quote; holds the Id and has its own constructor.
- WordLeaseQuoteInvented BMW FS child of Quote for lease quotes; it has a static constructor and two chained instance constructors.
- WordIdInvented property on Quote: the quote's id, such as Q-7, set once by the constructor.
- WordInnerExceptionA property on an exception that holds the error that caused it; with TypeInitializationException it holds the real error.
- WordRateSheetInvented UDC Finance class holding the rate table for NZ quotes; built once at start-up by Load.
- WordLoadInvented static factory method on RateSheet: reads the rates file, checks it, and returns the finished object.
- WordFileNotFoundExceptionThrown when a file path does not exist.
- WordRatesInvented lab class with a static constructor that throws, used to see TypeInitializationException.
- WordMainThe method a console app starts in.
- WordVinInvented class for one vehicle's 17-character VIN; its constructor is private, so it is built only through TryCreate.
- WordTryCreateA common name for a static factory method: it checks the input and returns the new object, or null, instead of throwing.
- WordAmountHow much a loan is for. Set once, by the constructor.
- WordRateCardInvented singleton holding the base rate: one object, built by the class itself through a private constructor.
- WordDealerRegionsInvented UDC Finance class mapping each dealer to a region; in the incident its static constructor read a file and failed.
- WordDealServiceInvented service in the UDC dealer portal API that opens a new deal.
- WordVINVehicle identification number: the 17-character ID every car and truck carries.
- WordFormatExceptionThrown when the format of an argument is invalid, e.g. parsing a malformed number or boolean string.
- WordLazyThreadSafetyModeSpecifies how a Lazy instance synchronizes access among multiple threads.
- WordResultA wrapper type returned by methods that can succeed or fail, avoiding thrown exceptions.
- WordCommercialTruckLoanVehicle loan class for commercial truck financing in BMW FS origination.
- WordVehicleLoanBase vehicle loan class holding VIN and financed principal amount.
- WordSubventedLoanA vehicle loan with manufacturer interest rate subvention or dealer discounts.
- WordVehicleContractLoan contract class modeling vehicle term, amount, and dealer tier.
- WordDealerRatesService providing subsidized rate flags and tier calculation rules.
- WordDealerTierRatesDealer tier pricing configuration class in the BMW FS loan origination API.
- WordLoanContractRepresents an origination loan contract with principal amount, term, and rate tier.
- WordTryParseAttempts to parse a string value without throwing an exception, returning true if successful.
- WordCreateSubventedStatic factory method creating a subsidized vehicle loan with promotional rate rules.
- WordDealerCreditLineCommercial credit line for auto dealerships; validates dealer identifier and limit via constructor chaining.
- WordDealerCreditServiceCommercial lending service that manages dealership credit applications and lines.
- WordDealerRateMatrixPricing matrix class calculating commercial interest tiers for vehicle dealer financing.
- WordIDealerRateMatrixInterface for looking up commercial dealer interest rate tiers.
- WordRateCardCacheThread-safe singleton cache holding vehicle pricing and rate rules in memory.
- WordTimeoutExceptionThrown when an operation times out, such as a remote configuration or network request.
- WordAppDomainAn isolated execution environment within a .NET process; static constructors execute once per AppDomain.
- WordBaseContractBase contract class demonstrating base constructor execution and static initialization order.
- WordstaticBelongs to the class itself, not to one object: one shared copy. A static constructor runs once, before the class is first used.
- WordwithMakes a copy of a record with some values changed: quote with { TermMonths = 48 }. The original is untouched.
- WordQuoteServiceInvented BMW FS service that starts and revises finance quotes; the quotes controller calls it.
- WordChangeTermInvented method on Quote: checks a new number of months, then changes the term on that one quote.
- WordAllowedTermsInvented static list on Quote: the terms offered (12 to 72 months, in 12s), built once by the static constructor.
- WordCheckTermInvented private static helper on Quote: throws if a term is not in AllowedTerms.
- WordExtrasInvented list of add-ons on a quote, such as a service plan or tyre cover. Each quote must own its own list.
- WordContainsAsks a list whether it holds a value: true or false.
- WordCreateThe usual name for a factory method: a static method that builds an object for you, often behind a private constructor.
- WordMemberwiseCloneBuilt-in shallow copy of an object. Protected: only the class or a child can call it. Lists inside are shared, not copied.
- WordICloneableOld interface with a Clone method. It never says deep or shallow, so the design guidelines say not to use it in public APIs.
- WordLetterInvented UDC Finance parent class for customer letters; its protected constructor checks the contract number.
- WordPayoffLetterInvented UDC Finance letter saying what it costs to pay a contract off early; two chained constructors.
- WordContractNoInvented property on Letter: the contract the letter is about, such as UDC-50213.
- WordValidDaysInvented property on PayoffLetter: how many days the payoff figure holds. 7 unless staff set another.
- WordForPayoffInvented method on LetterService: builds a payoff letter for one contract.
- WordLog.WritePractice helper in the live task: prints a line and returns 0, so you can see when a field's starting value runs.
- WordTermCatalogInvented class holding the terms each client offers, loaded once at start-up and handed out by the DI container.
- WordTermOptionsInvented Azure SQL table: which terms (months) each client offers.
- WordTermStoreInvented class that reads the TermOptions table from Azure SQL; the fixed version retries.
- WordDealerProposalInvented UDC Finance equipment proposal class using constructor chaining.
- WordProposalServiceInvented UDC Finance service that creates equipment proposals.
- WordDealerRateServiceInvented UDC Finance service whose static constructor in the incident caused an outage.
- WordEquipmentContractInvented BMW FS contract class used in the virtual constructor call bug.
- WordDefaultTermInvented static property on LeaseQuote holding the standard 36-month lease term.
- WordAssert.SinglexUnit check: passes only if the list holds exactly one item.
- WordArgumentNullExceptionThrown when a method or constructor is passed null for an argument that requires a valid value.
- Wordstring.IsNullOrEmptyChecks whether a string reference is null or contains zero characters ("").
- WordDealQuotePractice quotation class refactored to centralize validation with constructor chaining.
- WordRateOptionsOptions class holding regional dealer base rates bound from configuration.
- WordTargetFrameworkProject-file setting naming the .NET a project is built for, as a short code like net8.0; the plural form lists several, built one by one.
- WordSystem.WebThe old ASP.NET's core library on .NET Framework; tied to IIS on Windows and not part of ASP.NET Core.
- WordSystem.Drawing.CommonDrawing library (images, fonts) wrapping Windows' GDI+; supported only on Windows since .NET 6.
- WordConfigurationManager.NET Framework's way to read app.config or web.config settings; ASP.NET Core does not load web.config into it.
- WordPath.CombineJoins folder and file names with the right separator for the operating system (\ on Windows, / on Linux).
- WordAppContext.BaseDirectoryThe folder the running app was started from.
- WordControllerBaseBase class for ASP.NET Core API controllers: gives Ok(), NotFound() and the request's data.
- WordPlatformNotSupportedExceptionThe error .NET throws when you call something the current operating system can't do.
- WordBitmapSystem.Drawing types for an image in memory and for drawing on it; Windows only on .NET 6+.
- WordFisClientOur class that calls the FIS Asset Finance core over HTTP; needs the FIS base URL.
- WordLetterRendererOur class that draws a payoff letter (logo, barcode) into a PDF.
- WordLetterServiceUrlThe App Configuration setting telling the portal where the letter service lives.
- WordArrearsRuleUDC Finance rule in a shared library: more than 7 days late is arrears.
- WordEnvironment.ProcessIdThe id the operating system gave the running process.
- WordGetCurrentProcessIdWindows' native function (in kernel32) returning the process id.
- WordIntPtrA number the size of a memory address; often a raw native handle that .NET will not free for you.
- WordJitInfoSystem.Runtime.JitInfo: counts of methods the JIT compiled and time spent in it, for this process.
- WordSystem.Int32The .NET type behind C#'s int: a 32-bit whole number.
- WordMonthsLeftQuoteMath method: contract term minus months paid.
- WordQuoteMathSmall lending-API class used to show what IL and the JIT do.
- WordSignerHandleSafeHandle subclass that closes the bank signing library's native handle.
- WordNotImplementedExceptionThe exception for "this method has no code yet". Finding it in a finished class usually means an interface asks for more than the class can do.
- WordOverdueNoticeServiceThe nightly job's service that finds overdue contracts and hands each one to the sender for its channel; after the SOLID split it only runs the steps.
- WordIDeliveryTrackerOur small interface for channels that can report delivery (email, SMS): a Channel name and GetStatus. Letters don't implement it.
- WordEmailSenderSends BMW FS overdue notices by email; implements INoticeSender and IDeliveryTracker.
- WordSmsSenderSends Navistar Financial overdue notices by SMS; shortens a notice over 160 characters itself.
- WordLetterSenderQueues UDC Finance overdue notices as posted letters; implements INoticeSender only.
- WordLogOnlySenderA sender registered outside production: it writes a log line instead of contacting a customer.
- WordSqlContractRepositoryThe class behind IContractRepository that reads overdue contracts from Azure SQL.
- WordChannelA sender's channel name ("Email", "Sms", "Letter"); the notice service matches it to each contract's channel.
- WordGetStatusAsks a delivery tracker whether the notice for one contract was delivered.
- WordDealApproverNavistar dealer-portal class that runs every IApprovalRule on a truck deal and collects the problems.
- WordIApprovalRuleOne check on a truck deal: Check returns a problem, or an empty string if the deal passes.
- WordITaxRulePayroll take-home interface: one tax regime, TaxFor(salary) returns the tax.
- WordProgressiveTaxPayroll take-home class: taxes each slab of the salary at its own rate (10% from 10,000, 20% above 40,000).
- WordBankSignerOur small C# wrapper (P/Invoke declarations) around the bank's native signing library at UDC Finance.
- WordPaymentPlanInvented Navistar Financial class for one dealer payment plan (Amount and Months), guarded by its constructors.
- WordMaxMonthsInvented static property on PaymentPlan holding the 84-month ceiling, set once by its static constructor.
- WordPlanServiceInvented Navistar service that opens a standard 36-month PaymentPlan for a dealer.
- WordPlanQuoteServiceInvented application service that builds a standard PaymentPlan and clones a 48-month option with the copy constructor.
- WordCreatePlanRequestInvented JSON request DTO holding the raw amount and months sent to the quote API.
- WordFeeScheduleInvented UDC Finance fee class whose static constructor threw FormatException in the incident.
- WordDefaultFeeInvented property on FeeSchedule holding the standard quote fee.
- WordFeeOptionsInvented options class bound from configuration for FeeSchedule.
- WordValidateOnStartOptions builder method that runs options validation when the host starts instead of waiting for the first request.
- WordBasePlanParent class in the live-coding output task showing static and base constructor execution order.
- WordLeasePlanChild class of BasePlan in the live-coding output task showing static, chained, and inherited constructor order.
- WordParseConverts a string into a number or date; throws FormatException if the string is not valid.
- WordConsoleStandard input and output for console programs; Console.WriteLine prints a line of text.
- WordMileageReadingA truck's reported miles at one moment; a small readonly struct in the value-vs-reference card.
- WordNullableA struct that holds a value type or "no value"; int? is short for Nullable<int>.
- WordHasValueTrue when a nullable value type holds a value, false when it holds none.
- WordPriceThe car's price on a quote, a decimal.
- WordStatementLineOne contract's line on a customer statement: balance, last payment and so on.
- WordLastPaidOnThe date of a contract's last payment on a statement line; nullable, because a new contract has none.
- WordArrayListAn old, non-generic list that stores everything as object, so value types get boxed. Use List<T> instead.
- WordPaidWhether an instalment has been paid.
- WordReplaceQuoteLive-task method that points its Quote parameter at a new quote, to show what the caller sees.
- WordSystem.Web.MvcThe namespace of old ASP.NET MVC 5 on .NET Framework; replaced by ASP.NET Core MVC.
- WordSystem.Web.HttpThe namespace of old ASP.NET Web API 2 on .NET Framework; merged into ASP.NET Core.
- WordDealerThe EF Core entity for a car dealer: name, contacts, region and credit limit.
- WordDealersThe dealers controller's name in URLs (/Dealers/Details/42), or the Dealers table.
- WordDetailsThe action that shows one item, e.g. /Dealers/Details/42.
- WordIndexThe default action name: the list page of a controller.
- WordEditThe action that shows or saves an edit form.
- WordDealersControllerThe MVC controller for the dealer pages on the BMW FS dealer operations site.
- WordDealerServiceThe service that loads and saves dealers; the controller calls it.
- WordControllerThe ASP.NET Core MVC base class for controllers with views; adds View() on top of ControllerBase.
- WordModelIn a Razor view, the object the controller passed in; its type is set by @model.
- WordRedirectToActionReturns a 302 redirect to another action, e.g. after a POST saves data.
- WordCustomerStatementsControllerThe statements controller's old name in the view-not-found bug.
- WordStatementsControllerThe statements controller after the rename in the view-not-found bug.
- WordIActionFilterA filter with methods that run just before and just after an action.
- WordUpdateEF Core DbContext.Update: starts tracking an entity with every property marked changed, so SaveChanges writes every column.
- WordModelStateThe results of model binding and validation for this request; ModelState.IsValid is false if any check failed.
- WordEditDealerContactModelThe view model for the edit-contact form: only name, phone and email.
- WordDealerContactEditThe feature flag that shows or hides the edit-contact page.
- WordOldCreditLimitA column in the DealerAudit table: the dealer's credit limit before a change.
- WordCreditLimitHow much BMW FS lets a dealer have financed at once; a Dealer property.
- WordNameA dealer's or customer's name property.
- WordPhoneA dealer's phone number property.
- WordEmailA dealer's email address property.
- WordLocationThe HTTP response header that gives the address of a newly created resource, sent with 201 Created.
- WordOkController helper: returns 200 OK, with a body if you pass one.
- WordNoContentController helper: returns 204 No Content, success with no body.
- WordNotFoundController helper: returns 404 Not Found (with ProblemDetails under [ApiController]).
- WordConflictController helper: returns 409 Conflict, the request clashes with the resource's state.
- WordDisableForUnsafeHttpMethodsTurns off automatic retries for POST, PATCH, PUT, DELETE and CONNECT in the .NET HTTP resilience handler.
- WordMicrosoft.Extensions.Http.ResilienceThe NuGet package that adds retries, timeouts and circuit breakers to HttpClient (AddStandardResilienceHandler).
- WordGetThe action that reads one resource, e.g. GET /api/contracts/42.
- WordAsp.Versioning.MvcThe NuGet package for API versioning in ASP.NET Core controllers (v1, v2 in the path or a header).
- WordIdempotencyKeysThe table that stores each Idempotency-Key with its stored response; a unique index on the key.
- WordDeleteThe service method that deletes a resource; returns false when there was nothing to delete.
- WordRoundOur MileageReading method that returns a new reading rounded down to whole hundreds of miles.
- WordMilesThe number of miles on a MileageReading, set once by its constructor.
- WordMatchesOur batch helper that checks whether one bank payment pays one instalment.
- WordDealerDetailsModelThe small view model for the dealer details page: just the dealer name and region.
- WordContractServiceOur service class that finds, creates and changes contracts. The controller calls it so it holds no business code itself.
- WordContractDtoA small class that holds the fields of a contract as they go in and out of the API as JSON.
- WordHttpStatusCode.NotFoundThe enum value for status code 404, used in tests to check what the API answered.
- WordDuplicateKeyExceptionOur data layer's exception for a unique-index violation (SQL Server errors 2627, 2601), wrapping EF Core's DbUpdateException.
- WordStoredResponseOur class holding the status code and body saved under an idempotency key, so a repeated request gets the same answer.
- WordDbUpdateExceptionEF Core's exception when SaveChanges fails in the database, e.g. a unique-index violation.
- WordPaymentDraftA small demo struct (amount and a Paid flag) in the value-vs-reference card, used only to show that a struct is copied on =.
- WordAllowAnonymousAn attribute (or .AllowAnonymous() on a route) that lets a request through with no signed-in user; it wins over [Authorize].
- WordClaimsPrincipalThe signed-in user object ASP.NET Core builds from the token's claims; a controller reads it as User.
- WordClaimOne fact about a user: a type (name) and a value, like role = CreditOfficer.
- WordRequireRoleA policy requirement: the user must have one of these roles.
- WordRequireClaimA policy requirement: the user must have this claim (optionally with one of these values).
- WordIAuthorizationRequirementAn empty marker interface for a class that describes one authorization rule.
- WordIAuthorizationHandlerThe interface of a class that checks requirements; registered in DI so authorization finds it.
- WordAuthorizationHandler<ApprovalLimitRequirement>The base class for a handler of one requirement type; you override HandleRequirementAsync.
- WordSucceedAuthorizationHandlerContext.Succeed(requirement): marks a requirement as met. Not calling it means not met.
- WordIAuthorizationServiceThe service you call yourself to run a policy, often with the record as the resource.
- WordIAuthorizationService.AuthorizeAsyncRuns a policy for a user (and optionally a resource) and returns whether it succeeded.
- WordAddJwtBearerAdds the JWT bearer handler: reads Authorization: Bearer, validates the token and builds the user.
- WordTokenValidationParametersThe rules an incoming token must pass: issuer, audience, signing key, lifetime, clock skew.
- WordValidIssuerTokenValidationParameters: the issuer (iss) a token must have.
- WordValidAudienceTokenValidationParameters: the audience (aud) a token must have.
- WordIssuerSigningKeyTokenValidationParameters: the key a token's signature must match.
- WordClockSkewTokenValidationParameters: leeway for clock differences when checking expiry; default 5 minutes.
- WordTokenValidationParameters.ClockSkewSame as ClockSkew: the expiry leeway, default 5 minutes.
- WordPasswordHasherASP.NET Core Identity's class that hashes passwords and checks a password against a stored hash.
- WordWhereLINQ: keeps only the items (or rows) for which a test is true.
- WordHttpOnlyA cookie flag: page scripts can't read the cookie, only the browser sends it.
- WordSecureA cookie flag: the browser sends the cookie only over HTTPS.
- WordActionFilterAttributeA base class for an action filter you can put on a controller or action as an attribute.
- WordOnActionExecutingIActionFilter's method that runs just before the action, after model binding.
- WordOnActionExecutedIActionFilter's method that runs just after the action, with its result or exception.
- WordIExceptionFilterA filter MVC calls when the action or an action filter throws.
- WordIOrderedFilterA filter with an Order number; lower runs first on the way in.
- WordOrderIOrderedFilter.Order: changes when a filter runs relative to others of its kind.
- WordServiceFilter[ServiceFilter(typeof(T))]: gets the filter from DI, so T must be registered.
- WordIEndpointFilterA filter for minimal API routes (.NET 7+), added with AddEndpointFilter.
- WordIFilterFactory.IsReusableTells MVC whether one filter instance may be reused across requests.
- WordAuthorizationHere: the authorization middleware or the folder that holds our policies and handlers.
- WordApproveApplicationsController.Approve: the action that approves a loan application.
- WordCanApproveLoanThe policy on this card: role CreditOfficer plus an approval_limit claim (and in the live task a minimum limit).
- WordCreditOfficerThe role a Navistar credit officer has in the token.
- WordApprovalLimitRequirementOur custom requirement: the approval_limit claim must be at least a minimum.
- WordRatesControllerThe Navistar controller that was shipped without [Authorize].
- WordSameDealerOur resource-based policy: the dealer in the token must match the dealer on the record.
- WordTokenServiceOur class that signs access tokens and creates and revokes refresh tokens.
- WordUserServiceOur class that finds dealer users and checks their passwords.
- WordAuthControllerOur login and refresh endpoints.
- WordDealerAdminThe dealer-portal role that may request payoff quotes.
- WordPayoffQuoteContractsController.PayoffQuote: the action only DealerAdmin may call.
- WordRevokeAllAsyncTokenService.RevokeAllAsync: marks every live refresh token of a user as revoked.
- WordRevokedAtRefreshToken.RevokedAt: when the token was revoked; null while it's still usable.
- WordRefreshReuseModeThe feature flag in the JWT incident: Revoke (treat reuse as theft) or LogOnly.
- WordRevokeRefreshReuseMode value: reuse of a revoked refresh token revokes all the user's tokens.
- WordLogOnlyRefreshReuseMode value: reuse is only logged.
- WordAuditFilterOur action filter that logs which user called which action.
- WordApprovalAuditFilterThe filter in the filters incident that writes an audit row for each approval.
- WordApiExceptionFilterAn exception filter that turned exceptions into ProblemDetails, but only for the action stage.
- WordContractNotFoundExceptionThrown when a contract id doesn't exist; a filter maps it to 404.
- WordAddAuthenticationRegisters the services that read a request's credential, such as a bearer token, and turn it into a user.
- WordLoanApplicationThe class for one loan application row loaded from Azure SQL, with fields like DealerId.
- WordAuthorizeAsyncIAuthorizationService method: asks whether this user may use this record under a named policy; returns a result you check.
- WordAttributeThe base class of every C# attribute (a label in square brackets). Its name ending can be left off when you use the attribute.
- WordDisplayNameActionDescriptor property: the action's readable name, like ContractsController.Get.
- WordRefreshTokensThe DbSet (table) of refresh-token rows in AuthDbContext: hash, expiry, revoked time.
- WordLoginRequestSmall class that carries the email and password from the login JSON into the controller.
- WordRefreshRequestSmall class that carries the refresh token from the refresh JSON into the controller.
- WordTokenResponseSmall class that carries the access and refresh tokens back as JSON.
- WordGraceUsedOptional flag on a refresh token row, set when its one grace-window reuse has been used.
- WordClaimsIdentityThe claims from one source (one token or cookie) plus how they were proven, like "Bearer".
- WordIdentity.IsAuthenticatedTrue when the user's identity was proven by some sign-in method; false for an anonymous caller.
- WordIdentity.NameThe signed-in user's name, read from the name claim.
- WordFindFirstReturns the user's first claim with a given name, or null if there is none.
- WordActivityThe .NET object for the current unit of work in a trace; it carries the W3C trace id that ties logs across services.
- WordResponse.OnStartingRegisters code that runs just before the response headers are sent, so it can still add a header.
- WordItemsHttpContext.Items: a small dictionary that lives for one request, for passing data between middleware and code.
- WordOPTIONSThe HTTP method a browser uses for a CORS preflight: asking the API what a page may send before sending it.
- WordAddCorsRegisters CORS policies in Program.cs: which origins, methods and headers may call the API from a browser.
- WordAllowAnyOriginA CORS setting that lets pages from any website read the API's answers. .NET refuses it together with credentials.
- WordAllowCredentialsA CORS setting that lets the browser send cookies with cross-site calls; needs exact origins.
- WordTypeFilter[TypeFilter(typeof(X))]: creates filter X for each use without a DI registration; DI fills its constructor.
- WordIsReusableA flag on a filter factory saying MVC may reuse the filter it built for later requests.
- WordValidationProblemDetailsProblemDetails plus an errors object: each invalid field with its messages. Sent as a 400 for bad input.
- WordUseStatusCodePagesMiddleware that gives empty error responses (like a 404 with no body) a body, ProblemDetails when it's set up.
- WordIProblemDetailsServiceThe .NET service that writes a ProblemDetails response; AddProblemDetails registers it.
- WordCustomizeProblemDetailsAn AddProblemDetails option: code that runs on every ProblemDetails before it's written, to add fields like a correlation id.
- WordHashA one-way fingerprint of a token (SHA-256): the store keeps this, never the token itself.
- WordDealerIdThe dealer a record belongs to, compared with the dealer_id claim of the caller.
- WordAuthorizationHandler<TRequirement, TResource>Base class for a handler that checks one requirement against one record, like a Loan.
- WordSameDealerRequirementAn empty marker class naming the rule "the caller's dealer owns this record".
- WordAuthorityJwtBearer option: the token issuer's address; the handler downloads its public signing keys from there.
- WordChangePaymentDayUDC request class: the new monthly payment day and a reason.
- WordIValidatableObjectBuilt-in interface with one Validate method, for rules across several fields; MVC calls it after the attributes pass.
- WordValidateIValidatableObject's method: returns a ValidationResult for each rule the object breaks.
- WordValidationResultOne validation failure: a message and the field names it belongs to.
- WordUnmappedMemberHandlingSystem.Text.Json setting for JSON fields the class doesn't have: Skip (default, ignore them) or Disallow (error).
- WordCreateApplicationRequestRequest DTO for a new credit application: customer name, amount, term and down payment.
- WordJsonSerializerSystem.Text.Json's class that turns JSON text into C# objects and back.
- WordApplicationsV2ControllerA copied controller in the bug that missed the [ApiController] attribute.
- WordConfigureApiBehaviorOptionsSettings for [ApiController] behaviour, like the automatic 400.
- WordInvalidModelStateResponseFactoryApiBehaviorOptions setting: the code that builds the automatic 400 response, if you want a different shape.
- WordDownPaymentThe part of the price the buyer pays up front, on a credit application.
- WordAddJsonOptionsConfigures System.Text.Json for controllers: naming, unknown fields, converters.
- WordReasonIn the Navistar log line: the FIS core's reason code for a rejection, like VIN_INVALID.
- WordContractLockedExceptionThrown while the FIS core's nightly batch holds a contract; mapped to a 409.
- WordContractIdThe id of a finance contract; logged as a field so it can be searched.
- WordValueTaskA lighter kind of Task for methods that often finish without waiting.
- WordTryHandleAsyncIExceptionHandler's one method: handle the exception and return true, or return false to let the next handler try.
- WordGlobalExceptionHandlerOur catch-all IExceptionHandler: logs the exception once and writes a safe 500 ProblemDetails.
- WordLogWarningILogger method that writes a Warning line: unexpected but handled.
- WordDetailProblemDetails.Detail: the free-text explanation for this error. Only text you wrote; never the exception message.
- WordAddAzureKeyVaultAdds Azure Key Vault as a configuration source: its secrets become settings at start-up.
- WordFallbackPolicyAuthorizationOptions setting: the policy for every endpoint that has no [Authorize] or [AllowAnonymous] of its own.
- WordFromSqlRawEF Core: runs your own SQL text. Pasting input into that text is SQL injection; pass values as parameters.
- WordFromSqlEF Core: runs SQL written as an interpolated string, turning each {value} into a SQL parameter.
- WordAddRateLimiterRegisters rate limiting policies (since .NET 7): how many calls each caller may make in a time window.
- WordUseHttpsRedirectionMiddleware that answers http:// requests with a redirect to https://.
- WordUseHstsMiddleware that adds the HSTS header: the browser must use HTTPS for this site for a set time.
- WordCallerKeyHelper that picks the rate-limit counter: the user id if signed in, otherwise the IP address.
- WordSameSiteCookie flag that stops the browser sending the cookie on requests started by other sites (Lax or Strict).
- WordStrictSameSite=Strict: the cookie is never sent on requests started by another site.
- WordDefaultAzureCredentialAzure.Identity class that signs in with the app's managed identity in Azure, or your own sign-in on a laptop.
- WordOnRejectedRate limiter callback that runs for each rejected call, for example to add a Retry-After header.
- WordAddAuthorizationRegisters authorization: policies and the fallback policy.
- WordAddPolicyAdds a named policy (authorization, CORS or rate limiting) that endpoints refer to by name.
- WordRateLimitPartition.GetFixedWindowLimiterGives each key (user, IP, API key) its own fixed-window counter.
- WordMetadataName.RetryAfterLets a rejected rate-limit lease say how long until the caller may try again.
- WordUseRateLimiterMiddleware that applies the rate limiting policies; after UseAuthentication when limits are per user.
- WordRequireRateLimitingPuts a named rate limiting policy on endpoints.
- WordAbstractValidatorFluentValidation's base class for a validator: you extend it, name the request class in angle brackets, and put the rules in the constructor.
- WordBadRequestA ControllerBase helper that answers 400 Bad Request.
- WordAcceptedA property on the FIS answer: true when the core accepted the application.
- WordReasonCodeA property on the FIS answer: the code for why it was rejected, like VIN_INVALID.
- WordExtensionsThe dictionary of extra fields on a ProblemDetails, beyond the standard ones.
- WordSucceededTrue on an authorization result when a handler called Succeed; false otherwise.
- WordAuthorizationHandlerBase class for a handler that checks one requirement, and optionally one resource such as a loan.
- WordClaimTypes.NameIdentifierThe standard claim name for the signed-in user's id.
- WordUseForwardedHeadersMiddleware that reads X-Forwarded-For and puts the real client IP into RemoteIpAddress, when the sender is a trusted proxy.
- WordRemoteIpAddressThe IP address of whoever connected to the app: behind a proxy, the proxy, unless forwarded headers are set.
- WordChangePaymentDateRequestThe small request class in the example: it holds one number, NewDay.
- WordNewDayThe day of the month a customer wants for their payment; the filter checks it is 1 to 28.
- WordOnActionExecutionAsyncThe one method of IAsyncActionFilter: it wraps the action, and await next() runs the action itself.
- WordUsedAtThe time a refresh token was used, or null if it never was; a value here on a second use means reuse.
- WordGuidA 128-bit value used as an id; Guid.NewGuid() makes a new one that is unique in practice.
- WordRateTableInvented UDC Finance class with a private constructor and a static rate method, so no table object is created.
- WordNzRateTableInvented UDC Finance static class that loaded NZ rates in a static constructor; its failure is the incident.
- WordArrayA fixed-length block of slots, numbered from zero. Its Length never changes.
- WordLengthHow many slots an array has. Fixed when the array is created.
- WordHashSetA set of unique items. Add returns false for a duplicate; Contains is a fast hash lookup.
- WordICollectionThe collection interface: Count, Add, Remove, Contains and Clear on top of IEnumerable.
- WordIListThe list interface: index access plus Insert and RemoveAt on top of ICollection.
- WordInsertAdds an item at a position in a list, shifting the items after it.
- WordRemoveAtRemoves the item at a position; the items after it shift down.
- WordIndexOfFinds the position of an item in a list, or -1 when it is not there.
- WordRemoveAllA List method that removes every item matching a condition in one pass.
- WordGetHashCodeReturns the number a hash-based collection uses to pick a bucket. Equal objects must return the same number.
- WordTryGetValueLooks up a Dictionary key and returns false instead of throwing when it is missing.
- WordQueueFirst in, first out: add at the back, take from the front.
- WordStackLast in, first out: add and take from the same end.
- WordCapacityThe size of a List's hidden array; it grows in steps as items are added, and can be larger than Count.
- WordToArrayCopies a collection's items into a new array.
- WordEqualityComparerThe object a collection uses for Equals and GetHashCode; EqualityComparer<T>.Default is reference equality for a plain class and value equality for a record.
- WordContractCacheThe in-memory store of open contracts the BMW FS dealer portal reads, held once per API process.
- WordSystem.Collections.GenericThe namespace that holds List<T>, Dictionary<TKey,TValue>, HashSet<T> and the collection interfaces.
- WordVinMatcherThe mileage-job helper that matches returned truck VINs against the open contracts, using a HashSet for the lookup.
- WordWriteAllThe statement batch's method that writes one statement per contract.
- WordStatementWriterThe batch class that writes one dealer statement row for a contract.
- WordIReadOnlyCollectionA collection interface that promises a count and a read-only loop, but no add or remove.
- WordThreadOne worker the OS schedules: it has its own stack, you start it yourself, and creating one is expensive.
- WordThreadPoolThe set of reusable background threads .NET keeps; Task.Run and Parallel use it instead of creating new threads.
- WordTask.RunQueues a delegate to the thread pool and returns a Task for it; used for CPU-bound work.
- WordTask.DelayReturns a Task that finishes after a time, with no thread held while it waits.
- WordTask.Factory.StartNewOld way to start a Task; with an async delegate it returns a Task of a Task, so prefer Task.Run.
- WordParallel.ForEachRuns a loop body over a collection on several thread-pool threads and waits for all of them.
- WordParallel.ForEachAsyncThe async version: awaits an async body, with MaxDegreeOfParallelism limiting how many run at once.
- WordParallelOptionsSettings for a Parallel loop: MaxDegreeOfParallelism, a CancellationToken and the scheduler.
- WordMaxDegreeOfParallelismHow many iterations a Parallel loop may run at the same time.
- WordParallelLoopResultWhat Parallel.ForEach returns: IsCompleted, and the lowest break position if it stopped early.
- WordConcurrentBagA thread-safe, unordered bag: many threads can add at once without losing items.
- WordAggregateExceptionOne exception that holds a list of exceptions from parallel work; InnerExceptions has them all.
- WordasyncMarks a method that can wait without blocking; the compiler turns it into a state machine that returns a Task.
- WordawaitWaits for a Task's result without holding a thread; the method resumes when the work finishes.
- WordlockC# keyword that lets one thread at a time run a block, so two threads cannot change shared state at once.
- WordJoinA Thread method that blocks the caller until that thread ends.
- WordStartA Thread method that asks the OS to begin running it.
- WordIsBackgroundA Thread setting: a background thread does not keep the app alive when Main returns; the default is false.
- WordThread.AbortOld way to kill a thread; .NET Core and .NET 5+ throw PlatformNotSupportedException.
- WordEnvironment.ProcessorCountHow many logical CPUs this machine has; a cap for parallel work, not a target.
- WordTPLTask Parallel Library: the .NET classes built on Task, like Task.Run, Task.WhenAll, Parallel.For and Parallel.ForEach.
- WordSystem.Threading.TasksThe namespace that holds Task, Task<T>, Parallel, CancellationToken and the other TPL types.
- WordInnerExceptionsAggregateException's list of the failures it collected; loop over it to log every one.
- WordAction<T>A delegate for a method that takes one T and returns nothing; Parallel.ForEach expects one.
- WordParallelThe TPL's static class with Parallel.For, Parallel.ForEach and Parallel.ForEachAsync.
- WordBreakParallelLoopState.Break: finish iterations with lower indexes, then stop; it keeps the lowest break index.
- WordStopParallelLoopState.Stop: end the loop as soon as it can, without promising lower indexes finish.
- WordParallelLoopStateThe object a parallel body uses to stop early or record a break.
- WordCalculateAsyncThe test helper in this card: it waits 10 ms, then returns the term as a Task<int>.
- WordFeeThe card's pure fee method: extra miles times the rate; no shared state.
- WordGCGarbage collector: .NET's automatic memory cleaner. It frees managed objects that nothing can reach.
- WordGC.CollectForces a collection now; called with no argument it does a full blocking gen 2 collection. Avoid it in app code.
- WordGC.GetGenerationTells you which generation an object is in: 0, 1 or 2 (the LOH reports 2).
- WordGC.CollectionCountHow many collections of that generation have run since the process started; good for spotting a full GC storm.
- WordGC.GetTotalMemoryBytes the managed heap is using now; pass true to force a collection first.
- WordGC.GetGCMemoryInfoA snapshot of the heap: total bytes, fragmented bytes, generation sizes and the last collection's pause.
- WordGCSettingsReads and changes collector settings at run time: server or workstation mode, latency mode, LOH compaction.
- WordWeakReferenceA reference that does not keep its object alive. After a collection, IsAlive or TryGetTarget tells you whether it was freed; tests use it to prove a leak is gone.
- WordArrayPoolA shared pool of arrays. Rent a buffer and Return it so large allocations are reused instead of landing in the LOH each time.
- WordStreamA sequence of bytes you can write to or read from, such as a file, a network connection or the HTTP response body.
- WordRateFeedThis card's invented rate import: a static event, RateImported, that every RateView subscribes to.
- WordRateViewThis card's invented request-scoped view that subscribes to RateFeed and, before the fix, never unsubscribed.
- WordStatementPdfCacheThis card's invented cache of rendered statement PDFs, first unbounded, then bounded to 500 entries.
- Worddotnet-countersA command-line tool that shows live .NET counters such as heap size, gen 2 size, allocation rate and time in GC.
- Worddotnet-gcdumpA command-line tool that takes a heap dump of a running .NET process, for finding which objects are alive and what keeps them.
- Worddotnet-traceA command-line tool that records .NET events, including GC pauses, for a trace you can open in a viewer.
- WordAssertThe xUnit class whose methods check a test's expectation; a failing assert fails the test.
- WordAssert.TrueChecks that a condition is true, and fails the test with a message if it is not.
- WordAssert.FalseChecks that a condition is false, and fails the test with a message if it is not.
- WordIsAliveA property on WeakReference: true while the target object has not been collected. The standard way to test that a leak is gone.
- WordActionA built-in delegate type for a method with no return value; Action<string> takes one string.
- WordReadAllBytesFile.ReadAllBytes reads a whole file into one byte array, which goes on the LOH if the file is large.
- WordSystemThe base .NET namespace that holds GC, DateTime, Stream and the other core types.
- WorddelegateDeclares a delegate type: the shape of a method (what it takes, what it returns). A variable of that type can hold any method with that shape.
- WordeventWraps a delegate so outside code can only add (+=) or remove (-=) a method; only the class that owns it can raise it.
- WordFuncA built-in delegate type for a method that returns a value; the last type is the return type, so Func<decimal, decimal> takes a decimal and returns one.
- WordPredicateAn older built-in delegate type: takes one value and returns bool. LINQ uses Func<T, bool> instead.
- WordEventHandlerThe built-in delegate shape for events: (object? sender, TEventArgs e), returns nothing. EventHandler<T> carries data of type T.
- WordEventArgsThe base class for the data an event sends to its subscribers. EventArgs.Empty means no data.
- WordInvokeCalls a delegate, which runs every method in its invocation list in order. event?.Invoke(...) skips the call when nobody subscribed.
- WordGetInvocationListReturns the methods a multicast delegate holds, one delegate each, so you can call them one by one and collect every result.
- WordSelectA LINQ method that turns each item into something else, using the Func you pass it.
- WordOnActivatedA subscriber's method that runs when a contract goes live; its parameters match EventHandler<ContractActivatedEventArgs>.
- WordActivatedThe event on ContractActivator, raised once each time a contract goes live.
- WordContractActivatorMakes a contract live in the nightly worker and raises the Activated event; it doesn't know who listens.
- WordContractActivatedEventArgsThe data the Activated event sends: the ContractId that went live.
- WordWelcomeMailerSubscribes to Activated and queues the customer's welcome pack.
- WordLedgerPosterSubscribes to Activated and posts the new contract to the ledger.
- WordPaymentPosterThe long-lived worker class that posts payments and raises its Posted event.
- WordReceiptSenderSubscribes to PaymentPoster.Posted and sends a receipt; must unsubscribe in Dispose.
- WordPostPaymentPoster's method that records a payment and raises Posted.
- WordNextDueDateThe date a contract's next bill is due.
- WordCollectionsQueueNavistar example: runs a list of Func rules on an account and says whether collections should call it.
- WordShouldCallCollectionsQueue's method: true only if every rule says yes for the account.
- WordAccountNavistar example: one customer's truck finance account, with DaysOverdue, Balance and InBankruptcy.
- WordDaysOverdueHow many days a contract's oldest unpaid bill is late.
- WordINumberA generic maths interface (.NET 7+): one method can add ints, decimals or doubles because each provides the operators as static abstract members.
- WordGstUDC example: a static class with the NZ GST rate (15%) and an Add method that returns the amount with tax.
- WordLastQuoteA static field that held the last quote for logging; removed in review because every request shared it.
- WordOnModelCreatingPartialA partial method EF Core's scaffolded DbContext declares and calls at the end of OnModelCreating, so your own file can add model settings that survive a re-scaffold.
- WordAsNoTrackingEF Core: load rows without adding them to the change tracker. Faster and lighter for read-only queries; SaveChanges won't see edits to them.
- WordSqlDataReaderADO.NET: reads query results forward-only, one row at a time, while the connection stays open.
- WordDataReaderThe general name for ADO.NET's forward-only, read-only row stream (SqlDataReader for SQL Server).
- WordDataSetADO.NET: a disconnected in-memory copy of one or more DataTable objects and the relations between them.
- WordDataTableADO.NET: one in-memory table of rows and columns, usually inside a DataSet.
- WordDataAdapterADO.NET: fills a DataSet from the database (and can write changes back), opening and closing the connection itself.
- WordQueryAsyncDapper: runs a SQL query and maps each row to an object of type T by matching column names to property names.
- WordSqlBulkCopyADO.NET: copies many rows into a SQL Server table in one fast bulk operation.
- WordExecuteNonQueryADO.NET: runs a command that returns no rows; returns rows affected for INSERT, UPDATE, DELETE, otherwise -1.
- WordExecuteScalarADO.NET: runs a query and returns the first column of the first row, for example a COUNT.
- WordExecuteReaderADO.NET: runs a query and returns a data reader for its rows.
- WordExecuteReaderAsyncThe async version of ExecuteReader.
- WordReadAsyncMoves a data reader to the next row without blocking a thread; false when no rows are left.
- WordMicrosoft.Data.SqlClientThe NuGet package with SqlConnection, SqlCommand and SqlDataReader for SQL Server.
- WordLendingDbContextThe lending API's EF Core DbContext: its DbSet properties (Contracts, Payments) are the tables.
- WordDealerRowNavistar example: one row of the month-end dealer report, filled by Dapper.
- WordGetOrdinalADO.NET: finds a column's position in the reader by its name; throws if no column has that name.
- WordDealerQueriesNavistar example: the class that runs the month-end dealer report SQL with Dapper.
- WordLastPaidDateThe column holding the date of a contract's last payment.
- WordAddWithValueADO.NET: adds a parameter and guesses its SQL type from the C# value; a wrong guess can force a type conversion and an index scan.
- WordSqlDbTypeThe list of SQL Server column types (Int, Decimal, NVarChar...) you give a parameter so nothing is guessed.
- WordOrderByLINQ: sorts by a key, smallest first. OrderByDescending sorts largest first; ThenBy adds a tie-breaker.
- WordOrderByDescendingLINQ: sorts by a key, largest first.
- WordGroupByLINQ: puts items with the same key into groups, each with a Key and its items.
- WordGroupJoinLINQ: gives each item on the left the list of matching items on the right (empty if none): a left join.
- WordDefaultIfEmptyLINQ: turns an empty sequence into one default item; used with join ... into for a left join.
- WordIGroupingOne group from GroupBy: its Key plus the items that share it.
- WordIQueryableA query kept as an expression tree, so a provider like EF Core can translate it to SQL and run it in the database.
- WordAsEnumerableSwitches a query from IQueryable to IEnumerable: every LINQ step after it runs in memory, on rows already loaded.
- WordFirstLINQ: the first item that matches; throws if none.
- WordFirstOrDefaultLINQ: the first item that matches, or null (the default) if none.
- WordSingleLINQ: the only item that matches; throws if none or more than one.
- WordSingleOrDefaultLINQ: the only match, or null if none; still throws if more than one.
- WordSkipLINQ: skips the first n items; with EF Core it becomes OFFSET.
- WordTakeLINQ: keeps only the first n items; with EF Core it becomes TOP or FETCH.
- WordAnyLINQ: true if at least one item matches; stops at the first.
- WordSumLINQ: adds up a number from each item; 0 for an empty sequence.
- WordFindEF Core: looks up an entity by primary key, checking the change tracker before the database.
- WordDbSetEF Core: one table you can query with LINQ (an IQueryable) and add to.
- WordKeyThe value a GroupBy group was made from.
- WordOutOfMemoryExceptionThrown when .NET can't get enough memory for a new object; usually the process then dies.
- WordIsInArrearsContract's C# method: true when DaysOverdue is above 30. EF Core can't translate it to SQL.
- WordOverdueRowThe small result object for the collections screen: contract number, days overdue, balance.
- WordFeeForLateFeeCalculator's method: the late fee for an instalment, given its due date and today's date.
- WordInlineDataxUnit: one row of arguments for a [Theory]; the test runs once per row.
- WordNotNullxUnit's Assert.NotNull: passes if the value isn't null. Proves almost nothing on its own.
- WordDateOnlyA date with no time of day (.NET 6+). DayNumber counts days, so subtracting two gives days between.
- WordSetupMoq: tells a fake what to return when a method is called with given arguments.
- WordIAsyncStateMachineThe interface implemented by the compiler-generated struct that runs an async method as a state machine.
- WordAsyncTaskMethodBuilderThe helper struct that connects an async method state machine to the Task it returns.
- WordGetAwaiterReturns an awaiter object for a Task or awaitable that provides IsCompleted, OnCompleted, and GetResult.
- WordConfigureAwaitConfigures how an await continuation is marshaled; ConfigureAwait(false) skips capturing the current synchronization context.
- WordTask.WhenAnyCreates a Task that completes when any of the supplied tasks has completed.
- WordTask.FromResultCreates a Task that is already completed successfully with the specified result.
- WordTask.CompletedTaskA Task that has already completed successfully with no return value.
- WordcontinuationThe remaining part of an async method saved at an incomplete await; it runs after the awaited operation completes.
- WordI/O-boundWork that mostly waits for another system, such as SQL or an HTTP service, to respond.
- WordCPU-boundWork that spends its time using the processor, such as a large calculation.
- WordthroughputHow much work a system completes in a given time, such as requests per second.
- Wordthread-pool starvationA shortage of available thread-pool workers because many are blocked or busy, so queued work waits.
- Wordp95The response-time value within which 95 percent of requests complete; a high p95 shows the slow tail.
- Wordbounded queueA queue with a fixed maximum number of pending items, which limits memory and forces a policy when full.
- WordanalyzerA build-time code checker that reports or rejects patterns such as blocking waits in API code.
- WordActionResult<T>A controller return type that can contain either a response value of T or an HTTP result such as 404.
- WordSingleOrDefaultAsyncEF Core: runs a query asynchronously and returns its one matching row, or null if none; it reports an error if more than one matches.
- WordDisclosureGeneratorGenerates loan disclosure documents from contract entities.
- WordAsyncUsageAnalyzersRoslyn analyzer package that flags sync-over-async and missing await in C# code.
- WordMicrosoft.VisualStudio.Threading.AnalyzersRoslyn analyzer package that detects threading violations like synchronous waits on tasks.
- WordBenchmarkDotNetA standard .NET benchmarking library for accurately measuring execution time and allocations.
- WordRequestAbortedA CancellationToken on HttpContext that cancels when the client closes the connection.
- WordKestrelThe high-performance cross-platform HTTP web server built into ASP.NET Core.
- WordIOCPI/O Completion Ports: the Windows OS mechanism for non-blocking asynchronous socket and disk I/O.
- WordepollThe Linux kernel event notification facility used by .NET for scalable asynchronous socket I/O.
- Wordsync-over-asyncThe anti-pattern of blocking a thread on an async Task using .Result, .Wait(), or .GetAwaiter().GetResult().
- Wordasync voidAn asynchronous method returning void; unhandled exceptions bypass try/catch and terminate the process.
- WordQueueClientThe Azure Storage client class used to send, receive, and delete queue messages asynchronously.
- WordBMW FSBMW Financial Services: BMW's own finance company (a captive lender) in the US. Car loans and leases for BMW buyers.
- WordNavistar FinancialNavistar's finance company in the US: loans and leases for trucks, sold through dealers.
- WordUDC FinanceA New Zealand finance company: vehicle and equipment loans, under NZ consumer-credit law.
- WordFISFIS Asset Finance: the core lending system (accounts, schedules, payments, collections) the three clients run.
- Wordcaptive lenderA finance company owned by a manufacturer, to fund buyers of its own products.
- Wordcredit bureauA company that keeps people's credit history: Experian, Equifax and TransUnion in the US.
- WordMetro 2The standard file format US lenders use to send account status to the credit bureaus, once a month.
- Worddays past dueHow many days the oldest unpaid instalment is late. It drives notices, fees and what the bureau is told.
- WordACHThe US bank-to-bank payment system. A payment takes 1 to 3 business days to settle.
- WordEMIEquated monthly instalment: the same payment every month that pays off a loan's interest and principal together.
- WordTRAC leaseA truck lease with a residual fixed up front (terminal rental adjustment clause). At the end the truck is sold and the customer pays or gets the difference.
- WordresidualThe vehicle's value at the end of a lease, fixed when the deal is signed.
- Wordpayoff quoteThe amount that closes a contract early on a given date: principal left, plus residual and fees.
- Wordlien releaseRemoving the lender's legal claim on the vehicle once it is paid off.
- Wordfinance leaseA lease where the customer carries the vehicle's economics and pays the residual at the end to keep it.
- Wordoperating leaseA lease where the lender keeps the vehicle and its value risk; the customer hands it back at the end.
- Wordfinance contractThe lender's agreement with a customer for a vehicle: a loan (pay monthly, keep it) or a lease (pay monthly, give it back).
- Wordbilling runThe scheduled job that makes every due customer's bill for the month.
- Wordservice planA maintenance package paid monthly with a lease: servicing and wear parts included.
- Wordcredit applicationA dealer's request to the lender to finance one customer's vehicle: customer, vehicle, price, deposit, term.
- Wordend-of-day batchThe core system's nightly run that posts the day's payments, accrues interest and rolls the date; writes wait until it ends.
- WordGSTGoods and Services Tax: New Zealand's sales tax, 15%, added to the price of most things.
- WordL1First line of support: takes the user's call or email, logs a ticket, tries the known fixes, passes it on.
- WordL2Second line: support engineers who read logs, follow runbooks, restart things and flip flags. They do not change code.
- WordL3Third line: the developers who own the code. They find the root cause and write the fix.
- WordL2 podA small fixed support team (4 to 8 people) that looks after one client or product.
- Wordon-callThe person who must answer the phone out of hours this week if something breaks.
- WordP1–P4Incident severity. P1: down, or money or legal harm right now. P2: serious, with a workaround. P3: minor. P4: cosmetic or a question.
- WordSLAService level agreement: the contract's promise, such as "answer a P1 in 15 minutes, fix or work around it in 4 hours".
- WordServiceNowThe ticket tool most big companies use. Every incident (INC), problem (PRB) and change (CHG) is a record in it.
- Wordproblem ticketA ticket to find and remove the root cause, opened once the incident itself is calm.
- WordrunbookWritten steps for a known issue: what to check, what to run, when to call the next person.
- WordTeams bridgeOne Microsoft Teams call that stays open while an incident is worked. Everyone working it joins; one person leads.
- Wordincident commanderThe one person who runs the incident: decides, hands out tasks, sends the updates. They usually do not debug.
- WordRCARoot-cause analysis: the report on why it happened and what now stops it happening again.
- WordpostmortemA meeting and a document after an incident: timeline, cause, what went well, action items with owners. Blameless: it asks what allowed the mistake, not who made it.
- WordCABChange Advisory Board: the meeting that approves changes before they go to production.
- Wordchange requestThe ticket that asks to change production: what, when, risk, test proof and the rollback plan.
- Wordexpedited changeA change approved faster than the weekly CAB because waiting would cost more. Testing is shortened, not skipped.
- Wordemergency changeA change made now to stop harm, approved by one or two named people; the paperwork comes after.
- Wordchange freezeDays when no production changes are allowed except emergencies.
- Wordrelease windowThe agreed time when production changes may happen, when the fewest users are on.
- Wordgo/no-goA short call just before a release: every owner says ready or not; any "no" stops it.
- WordDEVThe development environment: shared servers where merged code runs first, with fake data.
- WordSITSystem integration testing: testers check the whole system works together, with the FIS core and the other systems.
- WordUATUser acceptance testing: the client's own business users check it does what they need, and sign it off.
- Wordpre-prodA copy of production with the same size and settings, for the last check before release.
- WordPRODProduction: the live system that real customers use.
- Wordmasked dataA copy of production data with names, account numbers and addresses scrambled, so testers can use it safely.
- Wordmaker-checkerOne person makes a change, a different person checks and approves it. Nobody does both.
- WordDBADatabase administrator: the person who owns and runs the production databases.
- WordcomplianceThe team that makes sure the business follows the law and the regulators' rules.
- Worddelivery managerThe vendor manager who owns delivery for one client: plans, people, contract and escalations.
- Wordfeature flagA setting that turns a feature on or off while the app runs, with no deploy.
- WordhotfixA small urgent fix released outside the normal release.
- Wordrelease branchA branch cut for one release. Only fixes go into it; new work stays on main.
- Wordcherry-pickGit: copy one commit from one branch onto another.
- WordPRPull request: a request to merge your branch. Teammates review it before it goes in.
- WordCI/CDCI: every push is built and tested automatically. CD: the tested build is deployed through the environments by a pipeline.
- Wordsmoke testA quick check right after a deploy that the main paths work.
- WordrollbackGoing back to the last good version.
- Wordfix forwardShipping a new fix instead of going back to the old version.
- WordPIIPersonally identifiable information: names, phone numbers, addresses, account and ID numbers.
- Wordstandard changeA low-risk change done the same way every time, approved once in advance, so it needs no CAB each time.
- WordDMSDealer management system: the software a dealership runs its business on; some call our APIs directly.
No match. Try fewer letters.
- 1Class and objectA class is the blueprint; an object is one thing built from it.ready
- 2References and newA variable holds the address of an object, not the object itself. new makes the object.ready
- 3ConstructorThe code that runs once when an object is created, to set its starting values.ready
- 4Access modifierspublic, private, protected: who is allowed to see and change each part of a class.ready
- 5InheritanceA child class gets the parent class's data and methods. The parent's constructor runs first.ready
- 6Virtual and overrideA child replaces a parent's method; .NET picks the version from the real object while the app runs.ready
- 7Abstract classesA parent you cannot build directly; it can leave methods for each child to fill in.ready
- 8Sealed, and the two meanings of newsealed stops inheritance. new builds an object, or on a method hides the parent's one.ready
- 9InterfaceA contract: a list of methods a class promises to have, with no code inside.ready
- 10Composition: is-a vs has-aA class holds a part and calls it, instead of being a subclass. Use it when one behaviour varies on its own.ready
- 11List and IReadOnlyListA growable list of objects, and a read-only view of it you can hand out safely.ready
- 12Data vs behaviourSome classes mainly hold data (a loan); others mainly do work (a calculator).ready
- 13State and statelessWhat an object remembers between one method call and the next.ready
- 14Static vs instanceBelongs to the class itself, not to any one object. One shared copy.ready
- 15Dispose and garbage collectionReleasing things like database connections as soon as you are done, instead of waiting for the garbage collector.ready
- 16One HTTP requestThe path one web request takes from the browser, through the app, and back.ready
- 17Threads and thread-safetyOne line of work the computer runs. A web app runs many at once.ready
- 18TaskAn object that stands for work that finishes later, like an order slip.ready
- 19What is a service?An object whose job is to do work for other code.ready
- 20The DI containerThe part of .NET that builds your objects and hands them to the classes that need them. This is dependency injection.ready
- 21Registering servicesTelling the container, in Program.cs, which class to build for each need.ready
- 22Resolving a serviceAsking the container for an object.ready
- 23Scope and the root providerA short-lived group of objects, usually one per web request.ready
- 24ProblemDetailsThe standard JSON shape for an API error: type, title, status, and an id to find the logs.ready
- 25Correlation ID and trace IDOne id per request, on every log line and in the error the user sees.ready
- 26CORSThe browser rule that says which other websites may read the API's answers.ready
- 27Claims and ClaimsPrincipalSmall facts about the signed-in user, read from the token on every request.ready
- 28Resource-based authorization and BOLAChecking the user against the record they asked for, after loading it.ready
- 29Signing keys: HMAC vs RSAHow a token is signed so nobody can change it, and who holds which key.ready
- 30Refresh-token rotationEach refresh token works once; a used one coming back means it was copied.ready
- 31Filter lifetimeHow a filter is registered decides whether requests share one filter object.ready
- 32Endpoint filtersFilters for minimal APIs: code around one endpoint that sees its arguments.ready
- 33LINQC# syntax for filtering, sorting and shaping lists and database queries.to write
- 34ORM: what EF Core isA library that turns C# objects into database rows and back. EF Core is one.to write
- 35DbContext and change trackingEF Core's object that talks to the database and tracks what you changed.to write
- 36Unit of workSaving many changes together, so they all succeed or all fail.to write
- 37Repository patternA class that hides how data is stored behind simple methods like GetById.to write